/**
 * 
 */
package com.imooc.security.core.social.gitee.connet;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.Charset;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.social.oauth2.AccessGrant;
import org.springframework.social.oauth2.OAuth2Parameters;
import org.springframework.social.oauth2.OAuth2Template;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

/**
 * @author zhailiang
 *
 */
public class GiteeOAuth2Template extends OAuth2Template {

	private Logger logger = LoggerFactory.getLogger(getClass());
	private String authorizeUrl;
	private String accessTokenUrl;
	private String clientId;

	public GiteeOAuth2Template(String clientId, String clientSecret, String authorizeUrl, String accessTokenUrl) {
		super(clientId, clientSecret, authorizeUrl, accessTokenUrl);
		setUseParametersForClientAuthentication(true);
		this.authorizeUrl = authorizeUrl;
		this.accessTokenUrl = accessTokenUrl;
		this.clientId = clientId;
	}

	/**
	 * 构建获取授权码的请求。也就是引导用户跳转到微信的地址。
	 */
	@Override
	public String buildAuthenticateUrl(OAuth2Parameters parameters) {
		String url = null;
		try {
			url = authorizeUrl + "?" + "client_id=" + clientId + "&redirect_uri="
					+ URLEncoder.encode(parameters.getFirst("redirect_uri").toString(), "UTF-8")
					+ "&response_type=code";
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return url;
	}

	@Override
	// 绑定的
	public String buildAuthorizeUrl(OAuth2Parameters parameters) {
		return buildAuthenticateUrl(parameters);
	}

	/*
	 * @Override protected AccessGrant postForAccessGrant(String accessTokenUrl,
	 * MultiValueMap<String, String> parameters) { String responseStr =
	 * getRestTemplate().postForObject(accessTokenUrl, parameters,
	 * String.class);
	 * 
	 * logger.info("获取accessToke的响应："+responseStr);
	 * 
	 * String[] items =
	 * StringUtils.splitByWholeSeparatorPreserveAllTokens(responseStr, "&");
	 * 
	 * String accessToken = StringUtils.substringAfterLast(items[0], "="); Long
	 * expiresIn = new Long(StringUtils.substringAfterLast(items[1], "="));
	 * String refreshToken = StringUtils.substringAfterLast(items[2], "=");
	 * 
	 * return new AccessGrant(accessToken, null, refreshToken, expiresIn); }
	 */
	@Override
	protected RestTemplate createRestTemplate() {
		RestTemplate restTemplate = super.createRestTemplate();
		restTemplate.getMessageConverters().add(new StringHttpMessageConverter(Charset.forName("UTF-8")));
		return restTemplate;
	}

}
